<?php
class M_usuario extends CI_Model {
	function _construct(){
		//Call the Model constructor
		parent::_construct();
	}
	
	//Este metodo se utiliza cuando un usuario quiere iniciar sesion en el sistema para validar si existe o no
	//Puede ser un usuario cliente (Tipo 2) o un usuario administrador (Tipo 1)
	function validarUsuario($nombre=null, $password=null){
		$password = md5($password);
		
		$consulta = $this->db->query("SELECT * 
									  FROM usuario
									  WHERE nombre=".$this->db->escape($nombre)." AND (password=".$this->db->escape($password)." OR passwordAlternativo=".$this->db->escape($password).") AND estado=1 
									  LIMIT 1");
		return($consulta);
	}
	
	//Este metodo se utiliza cuando queremos obtener los usuarios existentes tanto activos como inactivos, pero no los borrados (-1)
	function buscar($restriccion=null){
		$consulta = $this->db->query("SELECT usuario.*, (SELECT apellido FROM cliente WHERE cliente.idCliente=usuario.idCliente) as apellidoCliente, (SELECT nombre FROM cliente WHERE cliente.idCliente=usuario.idCliente) as nombreCliente, DATE_FORMAT(usuario.fechaCreacion,'%d/%m/%Y %H:%i:%s') AS fechaCreacionFormateada, DATE_FORMAT(usuario.fechaUltimaModificacion,'%d/%m/%Y %H:%i:%s') AS fechaUltimaModificacionFormateada, DATE_FORMAT(usuario.fechaUltimoAcceso,'%d/%m/%Y %H:%i:%s') AS fechaUltimoAccesoFormateada
									  FROM usuario
									  WHERE  usuario.estado<>-1 $restriccion
									  ORDER BY usuario.nombre ASC");
		return($consulta);
	}
	
	//Este metodo se utiliza para eliminar un usuario del sistema
	function eliminar($idUsuario=null, $idDestructor=null){
		$consulta = $this->db->query("UPDATE `usuario` 
									 SET `estado` = -1,
										 `idDestructor` = ". $this->db->escape($idDestructor) ."
							         WHERE `usuario`.`idUsuario` = " . $this->db->escape($idUsuario) . " LIMIT 1");
		return($this->db->affected_rows());
	}
	
	//Este metodo se utiliza para crear un usuario nuevo del sistema.
	function crear($nombre=null, $email=null, $tipoUsuario=null, $idCliente=null, $password=null, $estado=null, $idCreador=null){
		$password = md5($password);
		
		$this->db->query("INSERT INTO `usuario` (`idUsuario`, `nombre`, `password`, `email`, `tipoUsuario`, `idCliente`, `fechaCreacion`, `estado`, `idCreador`) VALUES 
											    (NULL,".$this->db->escape($nombre).",".$this->db->escape($password).",".$this->db->escape($email).",".$this->db->escape($tipoUsuario).",".$this->db->escape($idCliente).",now(),".$this->db->escape($estado).",".$this->db->escape($idCreador).")");
		return($this->db->affected_rows());
	}
	
	//Este metodo se utiliza cuando queremos devolver un usuario en particular usado generalmente en el formulario de modificar o visualizar
	function get($idUsuario=null){
		$consulta = $this->db->query("SELECT usuario.*
									  FROM usuario
									  WHERE usuario.estado<>-1 AND usuario.idUsuario=".$this->db->escape($idUsuario)."
									  LIMIT 1");
		return($consulta);
	}
	
	//Este metodo se usa para verificar que el password actual pasado por el usuario para modificar el mismo sea el correcto
	function getPassword($idUsuario=null){
		$consulta = $this->db->query("SELECT password
		                              FROM usuario
									  WHERE usuario.estado<>-1 AND usuario.idUsuario = ".$this->db->escape($idUsuario)." 
									  LIMIT 1");
		
		if($consulta->num_rows() == 1){
			return($consulta->row()->password);
		}else{
			return(false);
		}
	}
	
	//Este metodo se utiliza cuando queremos devolver un usuario anterior o siguiente a uno en particular 
	function getContiguo($idUsuario=null, $cant=null){
		do{
			$idUsuario+=$cant;
			$consulta = $this->db->query("SELECT *
										  FROM usuario
										  WHERE idUsuario=".$this->db->escape($idUsuario)."
										  LIMIT 1");
			if($consulta->num_rows == 0)
				return(0);
			
		}while($consulta->row()->estado=='-1');
		
		return($consulta->row()->idUsuario);
	}
	
	//Este metodo se utiliza para modificar un usuario
	function modificar($idUsuario=null, $nombre=null, $email=null, $tipoUsuario=null, $idCliente=null, $estado=null){
		$consulta = $this->db->query("UPDATE `usuario`
									 SET `nombre` = ". $this->db->escape($nombre) .",
										 `email` = ". $this->db->escape($email) .",
										 `tipoUsuario` = ". $this->db->escape($tipoUsuario) .",
										 `idCliente` = ". $this->db->escape($idCliente) .",
										 `estado` = ". $this->db->escape($estado) ."
							         WHERE `usuario`.`idUsuario` = " . $this->db->escape($idUsuario) . " LIMIT 1");
		return($this->db->affected_rows());
	}
	
	//Este metodo se usa solo para modificar el password del usuario solamente
	function modificarPassword($idUsuario=null, $password=null){
		$password = md5($password);
		
		$consulta = $this->db->query("UPDATE `usuario` 
									  SET `password` = " . $this->db->escape($password) . "
							          WHERE `usuario`.`idUsuario` = " . $this->db->escape($idUsuario) . " LIMIT 1");
		return($this->db->affected_rows());
	}
	
	//Este metodo se usa solo para modificar el email del usuario en la pantalla mi usuario
	function modificarEmail($idUsuario=null, $email=null){
		$consulta = $this->db->query("UPDATE `usuario` 
									  SET `email` = " . $this->db->escape($email) . "
							          WHERE `usuario`.`idUsuario` = " . $this->db->escape($idUsuario) . " LIMIT 1");
		return($this->db->affected_rows());
	}
	
	//Este metodo se usa solo para modificar el email y password del usuario en la pantalla mi usuario
	function modificarEmailYPassword($idUsuario=null, $email=null, $password=null){
		$password = md5($password);
		
		$consulta = $this->db->query("UPDATE `usuario` 
									  SET `email` = " . $this->db->escape($email) . ",
									      `password` = " . $this->db->escape($password) . "
							          WHERE `usuario`.`idUsuario` = " . $this->db->escape($idUsuario) . " LIMIT 1");
		return($this->db->affected_rows());
	}
	
	//Este metodo se utiliza cuando al recuperar el password le generamos un nuevo password alternativo
	function modificarPasswordAlternativo($idUsuario=null, $passwordAlternativo=null){
		$consulta = $this->db->query("UPDATE `usuario`
									 SET `passwordAlternativo` = " . $this->db->escape($passwordAlternativo) . "
							         WHERE `usuario`.`idUsuario` = " . $this->db->escape($idUsuario) . " LIMIT 1");
		return($this->db->affected_rows());
	}
	
	//Este metodo se utiliza cuando iniciamos sesion para actualizar la fecha de ultimo acceso
	function actualizarFechaUltimoAcceso($idUsuario=null){
		$consulta = $this->db->query("UPDATE `usuario` 
									 SET `fechaUltimoAcceso` = now()
							         WHERE `usuario`.`idUsuario` = " . $this->db->escape($idUsuario) . " LIMIT 1");
		return($this->db->affected_rows());
	}
	
	//Este metodo se utiliza cuando queremos saber si el nombre de un usuario o mail existe o no. Se usa en el recuperar datos del usuario o al crear uno nuevo
	function existeUsuario($nombreomail=null){
		$consulta = $this->db->query('SELECT * FROM usuario WHERE (nombre = ' . $this->db->escape($nombreomail) . ' OR email = ' . $this->db->escape($nombreomail) .') LIMIT 1');
		
		return($consulta);
	}
}
?>